package com.truedian.wg.components.organism.dialogUtil

import com.truedian.wg.components.organism.dialogUtil.internal.DialogComponent
import com.truedian.wg.components.organism.dialog.internal.DialogConfig
import com.truedian.wg.components.organism.dialog.internal.DialogHelper.Companion.DIALOG_ID_NONE_DIALOG_HELPER
import com.truedian.wg.components.organism.dialog.internal.DialogHelperManager
import com.truedian.wg.components.organism.dialogUtil.internal.DialogId
import com.truedian.wg.components.organism.dialogUtil.internal.PageId


/**
 * 弹窗工具类
 *
 * 提供静态方法用于弹窗的显示和取消操作。这是弹窗系统的对外接口，
 * 封装了底层的弹窗管理逻辑，为上层业务提供简洁易用的API。
 *
 * ## 主要功能
 * - 显示居中弹窗的便捷方法
 * - 显示底部弹窗的便捷方法
 * - 取消指定弹窗的便捷方法
 * - 自动处理页面ID和弹窗助手的获取
 *
 * ## 技术实现
 * - 通过[DialogHelperManager]获取对应页面的弹窗助手
 * - 委托给[com.truedian.wg.components.organism.dialog.internal.DialogHelper]执行具体的弹窗操作
 * - 提供默认的弹窗UI配置
 *
 * ## 使用场景
 * 业务代码中需要显示弹窗时，直接调用此工具类的静态方法即可。
 *
 * @see com.truedian.wg.components.organism.dialog.internal.DialogHelper 弹窗助手类
 * @see DialogHelperManager 弹窗助手管理器
 * @see DialogConfig 弹窗UI配置
 *
 * @since 1.0.0
 * @author CSP
 */
internal object DialogUtil {

    /**
     * 显示居中弹窗
     *
     * 在指定页面显示一个居中的弹窗。
     *
     * @param pagerId 页面唯一标识
     * @param dialogConfig 弹窗UI配置，使用默认配置如果不指定
     * @param dialogComponent 弹窗内容组件
     * @return 弹窗唯一标识ID，如果页面不存在则返回0
     */
    fun showCenterDialog(
        pagerId: PageId,
        dialogConfig: DialogConfig = DialogConfig(),
        dialogComponent: DialogComponent
    ): DialogId {
        val dialogHelper = DialogHelperManager.getDialogHelper(pagerId)
        return dialogHelper?.showCenterDialog(dialogConfig, dialogComponent)
            ?: DIALOG_ID_NONE_DIALOG_HELPER
    }

    /**
     * 显示底部弹窗
     *
     * 在指定页面显示一个从底部滑入的弹窗。
     *
     * @param pagerId 页面唯一标识
     * @param dialogConfig 弹窗UI配置，使用默认配置如果不指定
     * @param dialogComponent 弹窗内容组件
     * @return 弹窗唯一标识ID，如果页面不存在则返回0
     */
    fun showBottomDialog(
        pagerId: PageId,
        dialogConfig: DialogConfig = DialogConfig(),
        dialogComponent: DialogComponent
    ): DialogId {
        val dialogHelper = DialogHelperManager.getDialogHelper(pagerId)
        return dialogHelper?.showBottomDialog(dialogConfig, dialogComponent)
            ?: DIALOG_ID_NONE_DIALOG_HELPER
    }

    /**
     * 取消弹窗
     *
     * 取消指定页面的指定弹窗或最新弹窗。
     *
     * @param pagerId 页面唯一标识
     * @param dialogId 要取消的弹窗ID，为null时取消最新的弹窗
     */
    fun cancelDialog(pagerId: PageId, dialogId: DialogId? = null) {
        val dialogHelper = DialogHelperManager.getDialogHelper(pagerId)

        dialogHelper?.cancelAnim(dialogId)
    }
}